decimal 系統中,可用數字集合是:{0、1、2、3、4、5、6、7、8、9} -> 總共有 10 個,十進位
binary 系統中,可用數字集合是:{0, 1} -> 總共有 2 個,二進位
bitwise -> bit 就是 binary digit 二進制裡的數字,bitwise 就是指每 2 個一起看或運算
Bitwise Operators 將數字 operand 視為32 bits的數字,並且對每個 bit 進行運算
a & b
- 在兩個 operand 的對應位都是 1 的位置返回一個 1
let a = 10; // -> 二進制1010
let b = 9; // -> 二進制1001
console.log(a & b); // -> 十進制8 (true是1,false是0,二進制1000)
a | b
- 在兩個 operand 的對應位都是為 0 的位置返回一個 0
console.log(a | b); // -> 十進制11 (二進制1011)
a ^ b
– 在兩個 operand 的對應位相同的每個位置返回 0 (XOR 運算超級重要!!) -> exclusive or (⊕)
A | B | A ⊕ B |
---|---|---|
0 | 0 | 0 |
1 | 0 | 1 |
0 | 1 | 1 |
1 | 1 | 0 |
console.log(a ^ b); // -> 十進制3 (二進制0011)
下面三個是做 CPU 比較容易用到
~a
– 反轉 operand 的每個 bit
let a = 10; // -> 二進制1010
console.log(~a); // -> -11 (二進制0101,十進制5)
a << b
- 將二進制表示中的 a 向左移動 b 位,丟棄任何被移出的 bits
let a = 10; // -> 二進制1010
console.log(a << 1); // -> 十進制20 (二進制10100)
a >> b
-將二進制表示中的 a 向右移動 b 位,丟棄任何被移出的 bits
let a = 10; // -> 二進制1010
console.log(a >> 1); // -> 十進制5 (二進制101)
運算子 | A | B | C | D | 範例 | 結果 | 說明 |
---|---|---|---|---|---|---|---|
~ | 1(01) | ~A | -2(10) | NOT 運算 | |||
<< | 3(11) | C<<2 | 12(1100) | 左移運算 | |||
>> | 2(10) | B>>1 | 1(1) | 右移運算 | |||
>>> | 16(10000) | D>>>1 | 8(0100) | 無符號右移 | |||
& | 1(01) | 3(11) | A & C | 1(01) | AND | ||
^ | 1(01) | 2(10) | A ^ B | 3(11) | XOR | ||
| | 1(01) | 2(10) | A | B | 3(11) | OR |
下一篇會學習位元轉換。